package apply.apply1;

import apply.data.Person;
import org.junit.Test;

/**
 * 反射的应用1
 * 创建运行时类的对象
 * <p>
 * 1.通过Class实例调用newInstance()方法即可。
 * 2.要想创建成功，需要满足：
 * --条件1：要求运行时类中必须提供一个空参的构造器
 * --条件2：要求提供的空参的构造器的权限足够
 * 3.JavaBean中要求给当前类提供一个公共的空参的构造器。有什么用？
 * --场景1：子类对象在实例化时，子类的构造器的首行默认调用父类空参的构造器。
 * --场景2：在反射中，经常用来创建运行时类的对象。那么要求各个运行时类都提供一个空参的构造器。便于编写创建运行时类对象的代码。
 * 4. clazz.newInstance(); 过时，替换成什么结构？
 * 通过Constructor类调用newInstance(...);
 */
public class NewInstanceTest {
    @Test
    public void test1() throws InstantiationException, IllegalAccessException {
        /*
        InstantiationException: 没有对应构造器
        IllegalAccessException: 权限不够
         */
        Class<Person> personClass = Person.class;
        Person person = personClass.newInstance();
        System.out.println(person);

    }
}
